package gold.gold04;

import java.util.Arrays;

/**
 *
 */
public class S1606最小差 {
    /**
     * 44, 不过大家时间都差不多。都是先排序。
     * 可能先把两个数组排序之后比较好办。这样主要的时间就在前两个排序上。
     * 关于int超过最大值的操作。
     * Math.abs(Integer.MIN_VALUE) -> -2147483648, -Integer.MIN_VALUE也是这样。就abs之后还是他自己。
     */
    public int smallestDifference(int[] a, int[] b) {
        Arrays.sort(a);
        Arrays.sort(b);
        // a中一个指针, b中比a大/小, 两个指针。
        int high = 0, low = 0;
        int res = Integer.MAX_VALUE;
        for (int value : a) {
            while (b[high] < value && high < b.length - 1) {
                high++;
            }
            // 这里用long, 然后转回int, 因为这个diff是可以比max_value大的。
            low = Math.max(high - 1, 0);
            long diff = Math.min(Math.abs((long)b[high] - value), Math.abs((long)value - b[low]));
            res = (int)Math.min(res, diff); // long->int如果超出范围, 不报错但是结果不对。这个结果一定是在int范围内.
        }
        return res;
    }
}
